package controllDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import controllBen.InterfaceCRUD;
import controllBen.PalavrasLeitores;

public class DaoPalavrasLeitores extends DaoConnection implements
		InterfaceCRUD<PalavrasLeitores> {

	public DaoPalavrasLeitores() throws ClassNotFoundException {
		super();
	}

	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	String sql;

	@Override
	public void insert(PalavrasLeitores objeto) {
		sql = "INSERT into palavraLeitores(id, titulo, data_palavra, palavra) VALUES(NEXTVAL('seq_palavraLeitores'), ?, ?, ?)";
		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setString(1, objeto.getTitulo());
			ps.setTimestamp(2, new java.sql.Timestamp (objeto.getDataPalavra().getTime()));
			ps.setString(3, objeto.getPalavra());

			ps.execute();
			ps.close();
			conn.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void update(PalavrasLeitores objeto) {
		sql = "UPDATE palavraLeitores"
				+ "set titulo = ?, data_palavra = ?, palavra = ?"
				+ "WHERE id = ?";
		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setString(1, objeto.getTitulo());
			ps.setDate(2, (java.sql.Date) objeto.getDataPalavra());
			ps.setString(3, objeto.getPalavra());

			ps.setInt(4, objeto.getId());

			ps.execute();
			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void delete(int id) {
		sql = "DELETE from palavraLeitores WHERE id = ?";

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setInt(1, id);

			ps.execute();

			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public PalavrasLeitores getId(int id) {
		sql = "select id, titulo, data_palavra, palavra from palavraLeitores WHERE id = ?";

		PalavrasLeitores palavraLeitores = null;

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			palavraLeitores = new PalavrasLeitores();

			ps.setInt(1, palavraLeitores.getId());

			rs = ps.executeQuery(sql);

			palavraLeitores.setId(rs.getInt("id"));
			palavraLeitores.setTitulo(rs.getString("titulo"));
			palavraLeitores.setDataPalavra(rs.getTimestamp("data_palavra"));
			palavraLeitores.setPalavra(rs.getString("palavra"));

			conn.close();
			ps.close();
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return palavraLeitores;
	}

	@Override
	public ArrayList<PalavrasLeitores> listaTodos() {

		ArrayList<PalavrasLeitores> lista = new ArrayList<>();

		sql = "select id, titulo, data_palavra, palavra from palavraLeitores order by data_palavra desc";

		try {
			conn = getConnection();
			Statement st = conn.createStatement();
			rs = st.executeQuery(sql);

			while (rs.next()) {
				PalavrasLeitores palavraLeitores = new PalavrasLeitores();

				palavraLeitores.setId(rs.getInt("id"));
				palavraLeitores.setTitulo(rs.getString("titulo"));
				palavraLeitores.setDataPalavra(rs.getTimestamp("data_palavra"));
				palavraLeitores.setPalavra(rs.getString("palavra"));

				lista.add(palavraLeitores);

			}

			conn.close();
			st.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return lista;
	}

	@Override
	public ArrayList<PalavrasLeitores> getData() {

		ArrayList<PalavrasLeitores> listaData = new ArrayList<>();

		sql = "select id, titulo, data_palavra, palavra from palavraLeitores order by data_palavra";
		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();

			while (rs.next()) {

				PalavrasLeitores palavraLeitores = new PalavrasLeitores();

				palavraLeitores.setId(rs.getInt("id"));
				palavraLeitores.setTitulo(rs.getString("titulo"));
				palavraLeitores.setDataPalavra(rs.getTimestamp("data_palavra"));
				palavraLeitores.setPalavra(rs.getString("palavra"));

				listaData.add(palavraLeitores);
			}

			conn.close();
			ps.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return listaData;
	}

	public ArrayList<PalavrasLeitores> getPalavraindex() {
		sql = "select id, titulo, data_palavra, palavra from palavraLeitores order by data_palavra desc LIMIT 1";

		ArrayList<PalavrasLeitores> lista = new ArrayList<>();

		try {
			conn = getConnection();
			Statement st = conn.createStatement();
			rs = st.executeQuery(sql);

			while (rs.next()) {
				PalavrasLeitores palavraLeitores = new PalavrasLeitores();

				palavraLeitores.setId(rs.getInt("id"));
				palavraLeitores.setTitulo(rs.getString("titulo"));
				palavraLeitores.setDataPalavra(rs.getTimestamp("data_palavra"));
				palavraLeitores.setPalavra(rs.getString("palavra"));

				lista.add(palavraLeitores);

			}

			conn.close();
			st.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return lista;
	}
}
